/**
 * Notes: 定时任务管理器
 * Ver : CCMiniCloud Framework 2.5.0 ALL RIGHTS RESERVED BY cclinux0730 (wechat)
 * Date: 2023-09-01 21:00:00 
 */

const LogTask = require('./log_task.js');

class TaskMgr {
    constructor() {
        this.tasks = [];
    }

    /**
     * 初始化任务管理器
     */
    init() {
        // 注册日志管理任务
        this.registerTask(new LogTask());
        
        // 启动所有任务
        this.startAllTasks();
    }
    
    /**
     * 注册任务
     * @param {BaseTask} task 任务对象
     */
    registerTask(task) {
        if (!task) return;
        
        console.log(`[TaskMgr] 注册任务: ${task.name}`);
        this.tasks.push(task);
    }
    
    /**
     * 启动所有任务
     */
    startAllTasks() {
        for (const task of this.tasks) {
            this.startTask(task);
        }
    }
    
    /**
     * 启动单个任务
     * @param {BaseTask} task 任务对象
     */
    startTask(task) {
        if (!task || !task.interval) return;
        
        console.log(`[TaskMgr] 启动任务: ${task.name}, 间隔: ${task.interval}ms`);
        
        // 立即执行一次
        task.exec().catch(error => {
            console.error(`[TaskMgr] 任务执行失败: ${task.name}`, error);
        });
        
        // 设置定时执行
        const intervalId = setInterval(() => {
            task.exec().catch(error => {
                console.error(`[TaskMgr] 任务执行失败: ${task.name}`, error);
            });
        }, task.interval);
        
        // 保存定时器ID
        task.intervalId = intervalId;
    }
    
    /**
     * 停止任务
     * @param {BaseTask} task 任务对象
     */
    stopTask(task) {
        if (!task || !task.intervalId) return;
        
        console.log(`[TaskMgr] 停止任务: ${task.name}`);
        clearInterval(task.intervalId);
        task.intervalId = null;
    }
    
    /**
     * 停止所有任务
     */
    stopAllTasks() {
        for (const task of this.tasks) {
            this.stopTask(task);
        }
    }
}

// 创建任务管理器单例
const taskMgr = new TaskMgr();

module.exports = taskMgr; 